package com.demo.algorithm.demo5;

/**
 * <p>
 * </p>
 *
 * @author yanyg
 * @date 2024/2/17 16:25
 */
public class InterruptThread1 extends Thread {

    public static void main(String[] args) {
        try {
            InterruptThread1 t = new InterruptThread1();
            t.start();
            // 200 毫秒
            Thread.sleep(200);
            t.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        super.run();
        for (int i = 0; i <= 2000; i++) {
            System.out.println(Thread.currentThread().isInterrupted());
            try {
                // sleep() 函数时，有这样一个理念,就是当它一旦响应中断，便会把 interrupt 标记位清除。
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // 线程在 sleep 的时候，执行 interrupt() 方法，会报 InterruptedException异常
                // 同时会把 interrupt 标记位 false
                e.printStackTrace();
                // 所以需要再次手动中断，不然程序不会退出
                Thread.currentThread().interrupt();
            }
            System.out.println("i=" + i);
            //判断是否被中断
            if (Thread.currentThread().isInterrupted()) {
                System.out.println(Thread.currentThread().isInterrupted());
                System.out.println("中断了");
                //处理中断逻辑
                break;
            }
        }
    }
}

